﻿$(document).ready(function () {
    if (typeof (VOFFICE) == "undefined") {
        // ReSharper disable AssignToImplicitGlobalInFunctionScope
        VOFFICE = {};
        // ReSharper restore AssignToImplicitGlobalInFunctionScope
    }
    VOFFICE.DocInbox = (function () {
        var methods = {};
        methods.DocInboxForm = null;
        methods.BookReceiveList = null;
        var $docReceivePanel = $('#doc-receive-panel');

        methods.ValidateForm = {
            errorLabelContainer: "#receive-doc-form-error",
            rules: {
                Abstract: { required: true },
                DocDate: { required: true, validDate: true, lessThanNow: true },
                SignDate: { lessThanNow: true },
                BookId: { min: 1 },
                DocTypeId: { min: 1 },
                FlowId: { min: 1 }
            },
            messages: {
                Abstract: { required: jsResources.lang.DocInboxRequiredAbstract },
                DocDate: {
                    required: jsResources.lang.DocInboxRequiredDocDate,
                    lessThanNow: jsResources.lang.DocInboxLessThanNowDocDate
                },
                SignDate: {
                    lessThanNow: jsResources.lang.DocInboxLessThanNowSignDate
                },
                BookId: {
                    min: jsResources.lang.DocInboxRequiredBook
                },
                DocTypeId: {
                    min: jsResources.lang.DocInboxRequiredDocType
                },
                FlowId: {
                    min: jsResources.lang.DocInboxRequiredFlow
                }
            }
        };

        methods.DisplayDocInboxForm = function (model) {
            if (!!model) {
                methods.DocInboxForm = new DocInboxForm({ model: model });
                $docReceivePanel.html(methods.DocInboxForm.render().el);
                methods.DocInboxForm.initFormControl();
            }
        };

        var getKeyValue = function () {
            //get_book
            //get_doc_type
            //get_doc_property
            var stack = 6;
            SaveIndicator.indicate($.get('/keyvalue/get_book_receive', { nocache: (new Date()).toJSON(), deptId: VH.getDeptId() }, function (data) {
                if (!!data && data.Status == true) {
                    methods.BookReceiveList = data.Result;
                    stack = stack - 1;
                    //init form
                    if (stack == 0) {
                        methods.DisplayDocInboxForm(new DocumentInbox());
                    }
                }
            }));

            SaveIndicator.indicate($.get('/keyvalue/get_doc_type', { nocache: (new Date()).toJSON(), bookId: 0 }, function (data) {
                if (!!data && data.Status == true) {
                    VOFFICE.DocInbox.DocTypeList = data.Result;
                    stack = stack - 1;
                    //init form
                    if (stack == 0) {
                        methods.DisplayDocInboxForm(new DocumentInbox());
                    }
                }
            }));

            SaveIndicator.indicate($.get('/keyvalue/get_doc_property', { nocache: (new Date()).toJSON(), dpType: 1 }, function (data) {
                if (!!data && data.Status == true) {
                    methods.DocPriorityList = data.Result;
                    stack = stack - 1;
                    //init form
                    if (stack == 0) {
                        methods.DisplayDocInboxForm(new DocumentInbox());
                    }
                }
            }));
            SaveIndicator.indicate($.get('/keyvalue/get_doc_property', { nocache: (new Date()).toJSON(), dpType: 2 }, function (data) {
                if (!!data && data.Status == true) {
                    methods.DocSecurityList = data.Result;
                    stack = stack - 1;
                    //init form
                    if (stack == 0) {
                        methods.DisplayDocInboxForm(new DocumentInbox());
                    }
                }
            }));
            SaveIndicator.indicate($.get('/keyvalue/get_doc_property', { nocache: (new Date()).toJSON(), dpType: 3 }, function (data) {
                if (!!data && data.Status == true) {
                    methods.DocReceivedTypeList = data.Result;
                    stack = stack - 1;
                    //init form
                    if (stack == 0) {
                        methods.DisplayDocInboxForm(new DocumentInbox());
                    }
                }
            }));
            SaveIndicator.indicate($.get('/keyvalue/get_flow', { nocache: (new Date()).toJSON() }, function (data) {
                if (!!data && data.Status == true) {
                    methods.FlowList = data.Result;
                    stack = stack - 1;
                    //init form
                    if (stack == 0) {
                        methods.DisplayDocInboxForm(new DocumentInbox());
                    }
                }
            }));
        };
        // quy ước về hàm khởi tạo
        methods.init = function () {
            getKeyValue();
        };
        return methods;
    })(VOFFICE.DocInbox);

    //gọi hàm khởi tạo
    VOFFICE.DocInbox.init();
});

/*
Form lấy thông tin nhập vào để lưu vào csdl văn bản đến.
*/
window.DocInboxForm = Backbone.View.extend({
    initialize: function () {
        //đưa sự kiện vào đây nếu đưa ở events thì ko validate được dữ  liệu
        //đang tìm nguyên nhân
        $('#receive-doc-form').die('submit');
        $('#receive-doc-form').live('submit', this.submitDocReceive);
        //bind để tự động cập nhập lại dữ liệu khi các field của model thay đổi
        this.model.bind("change", this.render, this);
        this.ActionAfterSave = null;
    },

    events: {
        'click #submit-and-stay': 'submitAndStay',
        'click #submit-and-back': 'submitAndBack',
        'click #submit-and-copy': 'submitAndCopy',

        'click #show-office-partner': 'showOfficePartner',
        'click .show-flow-details': 'showFlowDetails',
        //su kien khi thay doi cac select doi du lieu tren form
        'change #BookId': 'bookChanged',
        'change #IsPackage': 'asPackage',
        'change #IsReply': 'showReplyPanel',
        'change #DocTypeId': 'loadMoreFlow',

        'click .remove-upload-file': 'removeUploadedFile',
        'click .remove-op': 'removeOfficePartner'
    },

    loadMoreFlow: function (event) {
        ///<summary>
        /// Khi loại công văn thay đổi thì tải lại một số flow
        ///</summary>  
        var self = this;
        var $target = $(event.currentTarget);
        if ($target && $target.length > 0) {
            SaveIndicator.indicate($.get('/keyvalue/get_flow?docTypeId=' + $target.val(), { nocache: (new Date()).toJSON() }, function (data) {
                if (data && data.Status == true) {
                    VOFFICE.DocInbox.FlowList = data.Result;
                    self.collectFormData();
                }
            }));
        }
    },

    showFlowDetails: function () {
        ///<summary>
        /// Hiển thị phần lấy văn bản đi
        ///</summary>
        var $flowSelect = $('#FlowId');
        if ($flowSelect && $flowSelect.length > 0) {
            VH.ShowFlowDetails($flowSelect.val(), function () {
                //TODO Thêm đoạn code chọn dữ liệu
            }, true);
        }
    },

    showReplyPanel: function (event) {
        ///<summary>
        /// Hiển thị chọn hồ sơ trả lời cho hồ sơ
        ///</summary>
        var $target = $(event.currentTarget);
        if ($target && $target.length > 0) {
            if ($target.is(':checked') == true) {
                $('#show-reply-details').fadeIn();
            } else {
                $('#show-reply-details').fadeOut();
            }
        }
    },

    removeOfficePartner: function (event) {
        ///<summary>
        /// Bỏ đơn vị gửi công văn hiện tại, hiển thị form chọn để chọn đơn vị khác
        ///</summary>
        this.model.set({ 'OfficePartnerList': [] }, { silent: true });
        $(event.currentTarget).remove();
        this.showOfficePartner();
    },

    removeUploadedFile: function (event) {
        ///<summary>
        /// Loại bỏ 1 file đã tải lên
        ///</summary>
        var $target = $(event.currentTarget);
        var self = this;
        VH.ConfirmBox(jsResources.DocReceiveDeleteFileConfirm($target.text()), jsResources.lang.Delete, jsResources.lang.Cancel, function () {
            var id = $target.attr('data-id');
            var list = self.model.get('UploadedFiles');
            if (!!id && list.length > 0) {
                for (var i = 0; i < list.length; i++) {
                    if (list[i].Key == id) {
                        list.splice(i, list[i]);
                    }
                }
                $target.remove();
                self.model.set({ 'UploadedFiles': list }, { silent: true });
            }
        }, null, jsResources.lang.DocInboxDeleteFileTitle);
    },

    showOfficePartner: function () {
        ///<summary>
        /// hiển thị form để chọn đơn vị gửi văn bản
        ///</summary>
        var self = this;
        VH.ShowOfficePartner(false, function () {
            if (!!window.SelectedOfficePartner && window.SelectedOfficePartner.length > 0) {
                self.model.set({ 'OfficePartnerList': window.SelectedOfficePartner });
                self.model.trigger('change');
                self.initFormControl();
            }
        });
    },

    asPackage: function (event) {
        ///<summary>
        /// Nếu nhận là cả bì hay không cả bì
        ///</summary>  
        var $target = $(event.currentTarget);
        if (!!$target) {
            if ($target.is(':checked')) {
                var $abstract = $('#Abstract');
                $abstract.val(jsResources.lang.DocInboxAsPackage);
                $abstract.focus();
                $('#submit-and-back').focus();
            } else {
                $('#Abstract').val('');
            }
        }
    },

    bookChanged: function (event) {
        ///<summary>
        /// Sự kiện xẩy ra khi người dùng chọn sổ văn bản khác
        ///</summary>  
        var self = this;
        var $target = $(event.currentTarget);
        if (!!$target && !!$target.val()) {
            if ($target.val() != "0") {
                SaveIndicator.indicate($.get('/keyvalue/get_doc_type', { nocache: (new Date()).toJSON(), bookId: $target.val() }, function (data) {
                    if (!!data && data.Status == true) {
                        VOFFICE.DocInbox.DocTypeList = data.Result;
                        self.collectFormData();
                    }
                }));
                SaveIndicator.indicate($.get('/book/get_new_number', { nocache: (new Date()).toJSON(), bookId: $target.val() }, function (data) {
                    if (!!data && data.Status == true) {
                        self.model.set({
                            'Code': data.Result.Code,
                            'CurrentNumber': data.Result.Number
                        });
                        self.initFormControl();
                    }
                }));
            } else if ($target.val() == "0") {
                VOFFICE.DocInbox.DocTypeList.splice(1, VOFFICE.DocInbox.DocTypeList.length - 1);
                self.model.set({
                    'Code': '',
                    'CurrentNumber': '',
                    'DocTypeId': 0
                });
                self.initFormControl();
            }
        }
    },

    submitAndStay: function () {
        ///<summary>
        /// Trigger submit form và lưu thông tin sau khi post form thì lưu lại trang thêm văn bản đến
        ///</summary>
        this.ActionAfterSave = 1;
        $('#receive-doc-form').trigger('submit');
    },

    submitAndBack: function () {
        ///<summary>
        /// Trigger submit form và lưu thông tin sau khi post form thì trở lại trang phía trước
        ///</summary>
        this.ActionAfterSave = 0;
        $('#receive-doc-form').trigger('submit');
    },

    submitAndCopy: function () {
        ///<summary>
        /// Trigger submit form và lưu thông tin sau khi post form thì copy một bản
        ///</summary>       
        this.ActionAfterSave = 2;
        $('#receive-doc-form').trigger('submit');
    },

    submitDocReceive: function (event) {
        ///<summary>
        /// Lưu hoặc cập nhập vào sổ văn bản đến
        ///</summary>
        event.preventDefault();
        var self = VOFFICE.DocInbox.DocInboxForm;
        if (!self) return false;
        SaveIndicator.indicate(self.model.save({
            'BookId': $('#BookId').val(),
            'Code': $('#Code').val(),
            'CurrentNumber': $('#CurrentNumber').val(),
            'PaperCode': $('#PaperCode').val(),
            'Abstract': $('#Abstract').val(),
            'IsPackage': $('#IsPackage').is(':checked') == true,
            'SignDate': VH.convertToServerDate($('#SignDate').val()),
            'SignName': $('#SignName').val(),
            'DocDate': VH.convertToServerDate($('#DocDate').val()),
            'DocTypeId': $('#DocTypeId').val(),
            'Priority': $('#Priority').val(),
            'Security': $('#Security').val(),
            'ReceivedType': $('#ReceivedType').val(),
            'NumberOfDoc': $('#NumberOfDoc').val(),
            'PageOfDoc': $('#PageOfDoc').val(),
            'IsReply': $('#IsReply').val(),
            'ReplyDocCode': $('#ReplyDocCode').val(),
            'FlowId': $('#FlowId').val(),
            'DepartmentIdCreate': VH.getDeptId(),
            'OuterOfficeIdSent': self.model.get('OfficePartnerList')[0].Key
        }, {
            success: function (data) {
                if (data && data.get('Status') == true) {
                    if (self.ActionAfterSave == 0) {
                        History.back(-1);
                    } else if (self.ActionAfterSave == 1) {
                        self.close();
                        VOFFICE.DocInbox.DisplayDocInboxForm(new DocumentInbox());
                    }
                    else if (self.ActionAfterSave == 2) {
                        var newModel = self.model.clone();
                        self.close();
                        newModel.set({ 'id': 0 });
                        VOFFICE.DocInbox.DisplayDocInboxForm(newModel);
                    }
                }
            }
        }));
        return false;
    },

    render: function () {
        this.template = _.template($('#receive-doc-form-template').html());
        $(this.el).html(this.template({ model: this.model.toJSON() }));
        return this;
    },

    collectFormData: function () {
        ///<summary>
        /// Lấy thông tin trên form để lđưa vào model
        ///</summary>
        this.model.set({
            'BookId': $('#BookId').val(),
            'Code': $('#Code').val(),
            'CurrentNumber': $('#CurrentNumber').val(),
            'PaperCode': $('#PaperCode').val(),
            'Abstract': $('#Abstract').val(),
            'IsPackage': $('#IsPackage').is(':checked') == true,
            'SignDate': $('#SignDate').val(),
            'SignName': $('#SignName').val(),
            'DocDate': $('#DocDate').val(),
            'DocTypeId': $('#DocTypeId').val(),
            'Priority': $('#Priority').val(),
            'Security': $('#Security').val(),
            'ReceivedType': $('#ReceivedType').val(),
            'NumberOfDoc': $('#NumberOfDoc').val(),
            'PageOfDoc': $('#PageOfDoc').val(),
            'IsReply': $('#IsReply').val(),
            'ReplyDocCode': $('#ReplyDocCode').val(),
            'FlowId': $('#FlowId').val()
        });
    },

    initFormControl: function () {
        ///<summary>
        /// Khởi tạo các control sau khi render form
        ///</summary>  
        var self = this;

        $('#receive-doc-form').validate(VOFFICE.DocInbox.ValidateForm);

        $('.input-date').datepicker({
            showButtonPanel: true,
            defaultDate: new Date(),
            onSelect: function (dateText, inst) {
                if (dateText) {
                    inst.input.focus();
                    $('#submit-and-back').focus();
                    //inst.input.trigger('change');
                }
            }
        });

        $('input[type=button]').button();

        this.DocReceiveUploader = new qq.FileUploader({
            uploadButtonText: jsResources.lang.QQ_uploadButtonText,
            cancelButtonText: jsResources.lang.QQ_cancelButtonText,
            failUploadText: jsResources.lang.QQ_failUploadText,
            // pass the dom node (ex. $(selector)[0] for jQuery users)
            element: document.getElementById('qq-upload'),
            // path to server-side upload script
            action: '/file/upload',
            multiple: false,
            params: { 'folder': '/DocReceive/' },
            onSubmit: function (id, fileName) {
                self.busy = true;
            },
            onComplete: function (id, fileName, responseJson) {
                self.busy = false;
                if (responseJson && responseJson.success == true) {
                    console.log(responseJson);
                    $('.qq-upload-success').remove();
                    var list = self.model.get('UploadedFiles');
                    list.push({ Key: responseJson.path, Value: responseJson.name });
                    self.model.set({ 'UploadedFiles': list });
                    self.model.trigger('change');
                    self.initFormControl();
                }
            }
        });
    },

    close: function () {
        ///<summary>
        /// Hủy form hiện tại
        ///</summary>
        this.unbind();
        this.model.unbind("change", this.render, this);
        $('#receive-doc-form').die('submit');
        this.remove();
    }
});